#include <iostream>
#include <unistd.h>
#include <cstring>
#include <cstdlib>
#include <sys/wait.h>
#include <cstdio>  // 添加 snprintf 需要的头文件

void childWrite(int fd) {
    char buff[1000];
    while (true) {
        // 修正拼写错误
        snprintf(buff, sizeof(buff), "hello cqy!!!");
        write(fd, buff, strlen(buff));
        sleep(1);  // 添加延迟防止过度占用CPU
    }
}

void fatherRead(int fd) {  // 添加缺失的大括号 {
    char buff[1000];
    while (true) {
        ssize_t n = read(fd, buff, sizeof(buff) - 1);
        
        if (n > 0) {
            buff[n] = '\0';  // 安全添加终止符
            std::cout << buff << std::endl;
        } else if (n == 0) {  // 管道关闭
            std::cout << "Pipe closed" << std::endl;
            break;
        } else {  // 错误处理
            perror("read");
            break;
        }
    }
}

int main() {
    int fd[2];
    if (pipe(fd) == -1) {  // 添加错误检查
        perror("pipe");
        return 1;
    }

    pid_t id = fork();
    if (id == -1) {  // 添加错误检查
        perror("fork");
        return 1;
    }

    if (id == 0) {  // 子进程
        close(fd[0]);  // 关闭读端
        childWrite(fd[1]);
        close(fd[1]);  // 关闭写端
        exit(0);  // 使用正常退出码
    } 
     // 父进程
        close(fd[1]);  // 关闭写端
        fatherRead(fd[0]);
        close(fd[0]);  // 修正语法错误
        waitpid(id, NULL, 0);
    return 0;
}
